package com.wutong.authority_server.utils;

import com.wutong.authority_server.entity.TreeData;

import java.util.ArrayList;
import java.util.List;

/**
 * @program: authority_server
 * @description:
 * @author: Leslie Lau
 * @create: 2020-05-21 10:31
 */
public class TreeUtil {

    /**
     * 获取数据集合
     *
     * @param entityList
     * @return
     * @author Leslie Lau
     * @date 2017年5月29日
     */
    public static List<TreeData> getTreeList(List<TreeData> entityList) {
        List<TreeData> resultList = new ArrayList<>();
        //获取顶层元素集合
        for (TreeData entity : entityList) {
            //顶层元素的parentCode==null或者为0
            if (entity.getPid() == null || entity.getPid().equals(0l)) {
                resultList.add(entity);
            }
        }
        //获取每个顶层元素的子数据集合
        for (TreeData entity : resultList) {
            entity.setChildren(getSubList(entity.getId(), entityList));
        }
        return resultList;
    }
    /**
     * 获取子数据集合
     *
     * @param id
     * @param entityList
     * @return
     * @author Leslie Lau
     * @date 2017年5月29日
     */
    private static List<TreeData> getSubList(Long id, List<TreeData> entityList) {
        List<TreeData> childList = new ArrayList<>();
        //子集的直接子对象
        for (TreeData entity : entityList) {
            Long pid = entity.getPid();
            if (id.equals(pid)) {
                childList.add(entity);
            }
        }
        //子集的间接子对象
        for (TreeData entity : childList) {
            Long id1 = entity.getId();
            entity.setChildren(getSubList(id1, entityList));
        }
        //递归退出条件
        if (childList.size() == 0) {
            return null;
        }
        return childList;
    }
}